#include <cstdio>
#include <iostream>
#include <pthread.h>
#include <unistd.h>
#include <thread>
using namespace std;

const char *dev="/dev/pts/0";

int main()
{
    int cnt = 10;
    FILE *fp = fopen(dev, "w");
    if(fp == NULL){
        printf("open %s error!\n", dev);
        return 1;
    }
    while(cnt--)
    {
        fprintf(fp, "hello bit, hello %d\n", cnt);
        sleep(1);
    }
    fclose(fp);
    return 0;
}
// int flag = 100;
// void showtid(pthread_t& tid) {
//     printf("tid: %ld", tid);
//     printf("tid: 0x%lx\n", tid);
// }
// string FormatId(const pthread_t &tid) {
//     char id[64];
//     snprintf(id, sizeof(id), "0x%lx", tid);
//     return id;
// }
// void* routine(void* args) {
//     string name = static_cast<const char*>(args);
//     pthread_t tid = pthread_self();
//     int cnt = 5;
//     while(cnt--) {
//         cout << "我是一个新线程：我的名字是：" << name << " 我的Id是：" << FormatId(tid) << endl;
//         sleep(2);
//         flag++;
//     }
//     return (void*)123;
// }
// int main() {
//     pthread_t tid;
//     int n = pthread_create(&tid, nullptr, routine, (void*)"thread_1");
//     showtid(tid);
//     int cnt = 5;
//     while(cnt--) {
//         cout << "我是main线程：我的名字是：main thread" << "我的id是：" << FormatId(pthread_self()) << ", flag" << flag << endl;
//         sleep(2);
//     }
//     void* ret = nullptr;
//     pthread_join(tid, &ret);
//     cout << "ret is : " << (long long int)ret << endl;
//     return 0;
// }
// ********************
// c++11的线程使用方式
// void hello() {
//     while(true) {
//         cout << "新线程：hello world， pid: " << getpid() << endl;
//         sleep(1);
//     }
// }
// int main() {
//     thread a(hello);
//     while(true) {
//         cout << "我是主线程..." << ", pid: " << getpid() << endl;
//         sleep(1);
//     }
//     a.join();
//     return 0;
// }
// void* threadrun(void* args) {
//     std::string name = (const char*)args;
//     while(true) {
        
//         cout << "我是一个新线程" << "name: " << name << ", pid: " << getpid() << endl;
//         int a = 10;
//         // a /= 0; 
//         sleep(1); // 暂停一秒钟
//     }
//     return nullptr;
// }
// int main() {
//     pthread_t tid;
//     pthread_create(&tid, nullptr, threadrun, (void*)"thread-1");
//      struct timespec t;
//     t.tv_sec = 0;        // 0 秒
//     t.tv_nsec = 0;
//     // usleep(1);
//     // nanosleep(&t, NULL);
//     while(true) {
//         cout << "我是主线程" << ", pid" << getpid() << endl;
//         sleep(1);
//     }
//     return 0;
// }